def change_lower(str_name: str):
    return str_name.lower()


# sorted返回一个排序的列表，sort是将原列表直接排序但不返回
my_list = 'This Item is Money my list'.split()
print(sorted(my_list))  # 大小写比较有歧义

# key 传递一个比较规则的函数
my_list.sort(key=change_lower)
print(my_list)  # 大小写统一规则

print('*' * 50)
student_tuples = [
    ('John', 'A', 19),  # 这一行是一个x   x[2]就是19
    ('Jane', 'B', 20),
    ('Dave', 'A', 10),
]
# lambda x: x[2] 是一个匿名函数，它表示排序时每个元组的第三个元素作为排序的依据。
# 只在这里使用一次，不必去其他地方定义这个函数，增加阅读速率
print(sorted(student_tuples, key=lambda x: x[2]))


class Student:
    def __init__(self, name, grade, age):
        self.name = name
        self.grade = grade
        self.age = age

    def __repr__(self):
        '''
        相比于__str__可以返回非字符串类型， 返回值
        :return:
        '''
        return repr((self.name, self.grade, self.age))

    # def __str__(self):
    #     return 'test'  #会覆盖上面


print('*' * 50)
student = Student('John', 'A', 19)
student_objects = [
    Student('John', 'A', 19),  # 这一行是一个x   x[2]就是19
    Student('Jane', 'B', 20),
    Student('Dave', 'A', 10),
]
print(sorted(student_objects, key=lambda student: student.age))

print('*' * 50)
#          x[0] x[1][0]x[1][1]
my_Dict = {'Li': ['M', 7],
           'Mi': ['A', 5],
           'Ja': ['B', 3],
           'Ka': ['C', 2]}
print(my_Dict)
print(my_Dict.items())
print(sorted(my_Dict.items(), key=lambda x: x[1][1]))
